--[[
NetFlow - OpenWRT 网络流量管理系统
带宽管理模型

本文件定义了带宽管理页面的配置模型，
提供带宽分配策略和动态调整配置。
]]--

local m, s, o

-- 创建配置映射
m = Map("netflow", "NetFlow 带宽管理",
    "配置不同负载情况下的带宽分配策略。")

-- 创建总带宽设置部分
s = m:section(NamedSection, "bandwidth", "bandwidth", "总带宽设置")
s.anonymous = true

-- 总带宽
o = s:option(Value, "total", "总带宽 (kbps)")
o.datatype = "uinteger"
o.default = "100000"
o.description = "设置接口的总带宽（单位：kbps，1Mbps = 1000kbps）"

-- 创建低负载带宽分配部分
s = m:section(NamedSection, "low_load", "bandwidth_allocation", "低负载带宽分配",
    "当网络负载 < 50% 时的带宽分配")
s.anonymous = true

-- 实时交互类最小带宽
o = s:option(Value, "rt_min", "实时交互类最小带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "30"
o.description = "为视频会议、在线游戏等实时交互类应用分配的最小带宽百分比"

-- 实时交互类最大带宽
o = s:option(Value, "rt_max", "实时交互类最大带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "100"
o.description = "为视频会议、在线游戏等实时交互类应用分配的最大带宽百分比"

-- 流媒体类最小带宽
o = s:option(Value, "streaming_min", "流媒体类最小带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "25"
o.description = "为视频流、音频流等流媒体类应用分配的最小带宽百分比"

-- 流媒体类最大带宽
o = s:option(Value, "streaming_max", "流媒体类最大带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "90"
o.description = "为视频流、音频流等流媒体类应用分配的最大带宽百分比"

-- 普通数据类最小带宽
o = s:option(Value, "normal_min", "普通数据类最小带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "25"
o.description = "为网页浏览、邮件等普通数据类应用分配的最小带宽百分比"

-- 普通数据类最大带宽
o = s:option(Value, "normal_max", "普通数据类最大带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "80"
o.description = "为网页浏览、邮件等普通数据类应用分配的最大带宽百分比"

-- 背景传输类最小带宽
o = s:option(Value, "background_min", "背景传输类最小带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "20"
o.description = "为文件下载、系统更新等背景传输类应用分配的最小带宽百分比"

-- 背景传输类最大带宽
o = s:option(Value, "background_max", "背景传输类最大带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "70"
o.description = "为文件下载、系统更新等背景传输类应用分配的最大带宽百分比"

-- 创建中等负载带宽分配部分
s = m:section(NamedSection, "medium_load", "bandwidth_allocation", "中等负载带宽分配",
    "当 50% <= 网络负载 < 80% 时的带宽分配")
s.anonymous = true

-- 实时交互类最小带宽
o = s:option(Value, "rt_min", "实时交互类最小带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "40"

-- 实时交互类最大带宽
o = s:option(Value, "rt_max", "实时交互类最大带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "100"

-- 流媒体类最小带宽
o = s:option(Value, "streaming_min", "流媒体类最小带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "30"

-- 流媒体类最大带宽
o = s:option(Value, "streaming_max", "流媒体类最大带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "80"

-- 普通数据类最小带宽
o = s:option(Value, "normal_min", "普通数据类最小带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "20"

-- 普通数据类最大带宽
o = s:option(Value, "normal_max", "普通数据类最大带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "60"

-- 背景传输类最小带宽
o = s:option(Value, "background_min", "背景传输类最小带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "10"

-- 背景传输类最大带宽
o = s:option(Value, "background_max", "背景传输类最大带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "40"

-- 创建高负载带宽分配部分
s = m:section(NamedSection, "high_load", "bandwidth_allocation", "高负载带宽分配",
    "当网络负载 >= 80% 时的带宽分配")
s.anonymous = true

-- 实时交互类最小带宽
o = s:option(Value, "rt_min", "实时交互类最小带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "50"

-- 实时交互类最大带宽
o = s:option(Value, "rt_max", "实时交互类最大带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "100"

-- 流媒体类最小带宽
o = s:option(Value, "streaming_min", "流媒体类最小带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "30"

-- 流媒体类最大带宽
o = s:option(Value, "streaming_max", "流媒体类最大带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "70"

-- 普通数据类最小带宽
o = s:option(Value, "normal_min", "普通数据类最小带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "15"

-- 普通数据类最大带宽
o = s:option(Value, "normal_max", "普通数据类最大带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "40"

-- 背景传输类最小带宽
o = s:option(Value, "background_min", "背景传输类最小带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "5"

-- 背景传输类最大带宽
o = s:option(Value, "background_max", "背景传输类最大带宽 (%)")
o.datatype = "range(0, 100)"
o.default = "20"

-- 创建动态调整设置部分
s = m:section(NamedSection, "dynamic_adjustment", "settings", "动态调整设置")
s.anonymous = true

-- 启用动态调整
o = s:option(Flag, "enabled", "启用动态调整")
o.rmempty = false
o.default = "1"
o.description = "启用或禁用动态带宽调整功能"

-- 调整间隔
o = s:option(Value, "interval", "调整间隔 (秒)")
o.datatype = "uinteger"
o.default = "10"
o.description = "设置动态带宽调整的时间间隔"

-- 负载阈值
o = s:option(Value, "load_threshold", "负载阈值 (%)")
o.datatype = "range(0, 100)"
o.default = "80"
o.description = "设置触发严格带宽限制的负载阈值"

-- 拥塞阈值
o = s:option(Value, "congestion_threshold", "拥塞阈值")
o.datatype = "float"
o.default = "0.8"
o.description = "设置触发拥塞控制的拥塞指数阈值"

-- 恢复时间
o = s:option(Value, "recovery_time", "恢复时间 (秒)")
o.datatype = "uinteger"
o.default = "30"
o.description = "设置拥塞控制后恢复正常带宽分配的时间"

return m
